Fuzzing is a term that refers to testing of a network device or software using a test that intentionally violates a network communications protocol. A computer program that implements fuzzing is referred to as a fuzzer. It is desirable that a fuzzer implement both stateless and stateful testing of a device under test. It is also desirable that the testing implemented by a fuzzer be comprehensive in terms of functional and fuzz testing, where functional testing refers to testing the responses of a device to test sequences or messages that are valid according to the protocol being tested and fuzz testing refers to testing the responses of the device to test sequences or messages that are invalid according to the protocol being tested. Manually programming such a fuzzer can be time consuming. Existing fuzzers fail to provide a framework for automatic test sequence generation in combination with analysis of test results.
Accordingly, there exists a need for methods, systems, and computer readable media for automatically generating a fuzzer that implements both functional and fuzz testing and for testing a network communications device using the fuzzer.